package www.woniuxy.com.class112.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;
import java.util.Map;

public class JwtUtil {
    //自定义的秘钥
    //HS256：即字节长度>=32
    private static String sect ="ksaasfdasdfadsfwfrasdfsadffcasijfasadfasfdlkfjlasjflksajfd";
    //生成token
    //键值对包含用户信息
    //参数1:键值对 包含了需要保存的关键数据
    //参数2:以分钟为单位的过期时间
    //以分钟为单位的时间 代表jwt的有效时间
    public static String createToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(sect.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
                .signWith(key)
                .compact();
    }

    //解析token
    //解析的前置步骤是校验，校验的过程中可能产生三种异常
    //格式异富
    //签名异常
    //过期异常
    public static Claims parseToken(String token) {
        Key key = Keys.hmacShaKeyFor(sect.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }

    public static Long getUserId(String token){
        Claims claims = parseToken(token);

        return Long.parseLong(claims.get("id").toString());
    }
}
